
package Modelo;

/**
 *
 * @author Ddj Murillo
 */

import com.mysql.jdbc.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;


public class CompraModelo {

    ConexionModelo conexion=new ConexionModelo();
    private transient Connection con;
    ResultSet rs;

    /**
 * Inserto nuevo pedido
 * @param pedido
 * @throws SQLException
 */
 public void setNuevocompra(Compra compra) throws SQLException {// insertar datos a la base de datos
        if( !conexion.isConnect() ){
          con=conexion.connect();
           while(!conexion.isConnect()){
                conexion.connect();
           }
     }

        PreparedStatement pstmt=null;
        try{

                pstmt=con.prepareStatement("insert into compra values(?,?,?,?,?,?,?,?)");
                pstmt.setString(1,  compra.getConsecutivo());
                pstmt.setDate(2, compra.getFecha());
                pstmt.setString(3,  compra.getObservaciones());
		pstmt.setString(4,  compra.getOrdenDeCompra_consecutivo());
                pstmt.setBoolean(5,  compra.isEstado());
                pstmt.setDouble(6, compra.getSubtotal());
                pstmt.setDouble(7, compra.getIva());
                pstmt.setDouble(8, compra.getTotal());
		pstmt.executeUpdate();

        }finally{
               if( pstmt!=null )
                  pstmt.close();
        }
    }

  /**
   * Obtiene el ultimo consecutivo o maximo consecutivo
   */
  public int getConsecutivo() throws SQLException{
     if( !conexion.isConnect() ){
          con=conexion.connect();
           while(!conexion.isConnect()){
                conexion.connect();
           }
     }

       int consecutivo=0;
       PreparedStatement pstmt=null;
       ResultSet rs=null;
       try{
            consecutivo=10000000;
            //calculo el maximo consecutivo
            pstmt=con.prepareStatement("SELECT max(cast(consecutivo As SIGNED)) as consecutivo FROM compra");
            rs=pstmt.executeQuery();

            while(rs.next()){
                if(rs.getInt(1)!=0)
                    consecutivo=rs.getInt(1);
            }
        }finally{
 		if(rs!=null){
			rs.close();
		}
		if(pstmt!=null){
			pstmt.close();
			pstmt=null;
		}
	}
        return consecutivo;
  }

  /**
 * tipo=parametros de consulta clientes, tipo:0.cedula, 1.Vendedor
 * @param consulta
 * @param tipo
 * @return
 * @throws SQLException
 */
 public LinkedList consultaCompraTabla(Date fechaInicial,Date fechaFinal,String consulta,int tipo)throws SQLException{
    if( !conexion.isConnect() ){
          con=conexion.connect();
           while(!conexion.isConnect()){
                conexion.connect();
           }
     }

	LinkedList listaFact=new LinkedList();
	PreparedStatement pstmt=null;
	ResultSet rs=null;
  	try{
            if (tipo==0)
  		pstmt=con.prepareStatement("select C.fecha,C.consecutivo,P.nombre,P.apellido,P.establecimiento,P.direccion,C.subtotal,C.iva,C.total "
                                         + "from compra C,proveedores P,ordendecompra O "
                                         + "where O.consecutivo=C.OrdenDeCompra_consecutivo "
                                         + "and O.`proveedores_nit`=P.nit "
                                         + "and C.fecha Between '"+ fechaInicial+"' and '"+ fechaFinal +"'");
            else if (tipo==1)
                 pstmt=con.prepareStatement("select C.fecha,C.consecutivo,P.nombre,P.apellido,P.establecimiento,P.direccion,C.subtotal,C.iva,F.total "
                                             + "from compra C,proveedores P,ordendecompra O "
                                             + "where O.consecutivo=C.OrdenDeCompra_consecutivo "
                                             + "and O.`proveedores_nit`=P.nit "
                                             + "and O.`proveedores_nit`='"+consulta+"' "
                                             + "and C.fecha Between '"+ fechaInicial+"' and '"+ fechaFinal +"'");

            else if(tipo == 2)
                 pstmt=con.prepareStatement("select C.fecha,C.consecutivo,P.nombre,P.apellido,P.establecimiento,P.direccion,C.subtotal,C.iva,F.total "
                                               + "from compra C,proveedores P,ordendecompra O "
                                               + "where O.consecutivo=C.OrdenDeCompra_consecutivo "
                                               + "and O.`proveedores_nit`=P.nit "
                                               + "and O.sucursal_codigo='"+consulta+"' "
                                               + "and C.fecha Between '"+ fechaInicial+"' and '"+ fechaFinal +"'");

  		rs=pstmt.executeQuery();
  		while(rs.next()){
  			listaFact.add(ListadoFactura.load(rs));
  		}

  	}finally{
 		if(rs!=null){
			rs.close();
		}
		if(pstmt!=null){
			pstmt.close();
			pstmt=null;
		}
	}
        conexion.disconnect();
	return listaFact;
 }



/**
 * consultando factura
 * @param consulta
 * @return Factura
 * @throws SQLException
 */
  public Compra consultaCompra(String consulta) throws SQLException{
      if( !conexion.isConnect() ){
          con=conexion.connect();
           while(!conexion.isConnect()){
                conexion.connect();
           }
     }

      Compra compra=new Compra();
      PreparedStatement pstmt=null;
	ResultSet rs=null;
  	try{
            pstmt=con.prepareStatement("select consecutivo,fecha,OrdenDeCompra_consecutivo from compra where consecutivo='"+ consulta + "'");//probando
            rs=pstmt.executeQuery();

            while(rs.next()){
                compra.setConsecutivo(rs.getString(1));
                compra.setFecha(rs.getDate(2));
                compra.setOrdenDeCompra_consecutivo(rs.getString(3));
            }
  	}finally{
 		if(rs!=null){
			rs.close();
		}
		if(pstmt!=null){
			pstmt.close();
			pstmt=null;
		}
	}
        return compra;
  }



/**
 * consolida productos
 * @param consulta
 * @return Factura
 * @throws SQLException
 */
  /*public LinkedList consolidar(Date fechaInicial,Date fechaFinal,String consulta) throws SQLException{
      if( !conexion.isConnect() ){
          con=conexion.connect();
           while(!conexion.isConnect()){
                conexion.connect();
           }
     }

      LinkedList listaFact=new LinkedList();
      PreparedStatement pstmt=null;
	ResultSet rs=null;
  	try{
            pstmt=con.prepareStatement("SELECT "+
                                       "detallespedido.`codigoProducto` AS codigoProducto, "+
                                       "producto.`descripcion` AS producto_descripcion, "+
                                       "sum(detallesfactura.`cantidadFacturada`)AS Cantidad "+
                                       "FROM "+
                                       "`factura` factura INNER JOIN `detallesfactura` detallesfactura ON factura.`consecutivo` = detallesfactura.`consecutivoFactura` "+
                                       "INNER JOIN `pedido` pedido ON factura.`pedido_consecutivo` = pedido.`consecutivo` "+
                                       "INNER JOIN `detallespedido` detallespedido ON pedido.`consecutivo` = detallespedido.`consecutivoPedido` "+
                                       "INNER JOIN `producto` producto ON detallespedido.`codigoProducto` = producto.`codigo` "+
                                       "WHERE "+
                                       "detallesfactura.consecutivoFactura = factura.consecutivo "+
                                       "AND factura.pedido_consecutivo = pedido.consecutivo "+
                                       "AND pedido.consecutivo = detallesPedido.consecutivoPedido "+
                                       "AND detallesFactura.itemNo = detallesPedido.itemno "+
                                       "AND pedido.codigoVendedor='"+ consulta + "' "+
                                       "and factura.fecha Between '"+ fechaInicial+"' and '"+ fechaFinal +"' "+
                                       "GROUP BY "+
                                       "codigoProducto");
            rs=pstmt.executeQuery();

            while(rs.next()){
                listaFact.add(new Object[]
                    {
                      rs.getString(1),//codigo
                      rs.getString(2),//descripcion
                      rs.getString(3),//cantidad
                    });
            }
  	}finally{
 		if(rs!=null){
			rs.close();
		}
		if(pstmt!=null){
			pstmt.close();
			pstmt=null;
		}
	}
        return listaFact;
  }

/**
 * total de productos consolidados
 */
  /*
public int totalProductosConsolidados(Date fechaInicial,Date fechaFinal,String consulta) throws SQLException{
   if( !conexion.isConnect() ){
          con=conexion.connect();
           while(!conexion.isConnect()){
                conexion.connect();
           }
     }

      int total=0;
      PreparedStatement pstmt=null;
	ResultSet rs=null;
  	try{
            pstmt=con.prepareStatement("select Count(*) as total from (SELECT "+//cuenta el nuemro de registros
                                       "detallespedido.`codigoProducto` AS codigoProducto, "+
                                       "producto.`descripcion` AS producto_descripcion, "+
                                       "sum(detallesfactura.`cantidadFacturada`)AS Cantidad "+
                                       "FROM "+
                                       "`factura` factura INNER JOIN `detallesfactura` detallesfactura ON factura.`consecutivo` = detallesfactura.`consecutivoFactura` "+
                                       "INNER JOIN `pedido` pedido ON factura.`pedido_consecutivo` = pedido.`consecutivo` "+
                                       "INNER JOIN `detallespedido` detallespedido ON pedido.`consecutivo` = detallespedido.`consecutivoPedido` "+
                                       "INNER JOIN `producto` producto ON detallespedido.`codigoProducto` = producto.`codigo` "+
                                       "WHERE "+
                                       "detallesfactura.consecutivoFactura = factura.consecutivo "+
                                       "AND factura.pedido_consecutivo = pedido.consecutivo "+
                                       "AND pedido.consecutivo = detallesPedido.consecutivoPedido "+
                                       "AND detallesFactura.itemNo = detallesPedido.itemno "+
                                       "AND pedido.codigoVendedor='"+ consulta + "' "+
                                       "and factura.fecha Between '"+ fechaInicial+"' and '"+ fechaFinal +"' "+
                                       "GROUP BY "+
                                       "codigoProducto) As Total");
            rs=pstmt.executeQuery();
            total=rs.getInt(1);//total

  	}finally{
 		if(rs!=null){
			rs.close();
		}
		if(pstmt!=null){
			pstmt.close();
			pstmt=null;
		}
	}
        return total;
}
   *
   */

}
